home *** CD-ROM | disk | FTP | other *** search
- OPT OSVERSION = 37
- OPT PREPROCESS
-
-
- ->/////////////////////////////////////////////////////////////////////////////
- ->/////////////////////////////////////////////////////// #define ... ... /////
- ->/////////////////////////////////////////////////////////////////////////////
- ->#define DEBUG
-
-
- ->/////////////////////////////////////////////////////////////////////////////
- ->//////////////////////////////////////////////////////////// MODULE ... /////
- ->/////////////////////////////////////////////////////////////////////////////
- MODULE 'dos/dos'
- MODULE 'exec/ports' , 'exec/io' , 'devices/timer'
- MODULE '*Trace'
-
- #ifdef DEBUG
- MODULE 'tools/exceptions'
- #endif
-
-
- ->/////////////////////////////////////////////////////////////////////////////
- ->//////////////////////////////////////////////// RAISE ... IF ... = ... /////
- ->/////////////////////////////////////////////////////////////////////////////
- RAISE "ARGS" IF ReadArgs() = NIL ,
- "PORT" IF CreateMsgPort() = NIL ,
- "TIME" IF CreateIORequest() = NIL ,
- "DEV" IF OpenDevice() <> NIL
-
-
- ->/////////////////////////////////////////////////////////////////////////////
- ->/////////////////////////////////////////////////////// CONST ... = ... /////
- ->/////////////////////////////////////////////////////////////////////////////
- ENUM ARG_TRACEFILE ,
- ARG_LIBS , ARG_DEVS , ARG_ALL ,
- ARG_FIRSTDELAY , ARG_DELAY ,
- ARG_BEEP , ARG_REQUESTER ,
- NUMBER_ARGS
-
- ENUM QUIT , YES , NO , MAX_ANSWER
-
- #ifdef DEBUG
- CONST TIMEUNIT = 1 -> second
- #endif
- #ifndef DEBUG
- CONST TIMEUNIT = 60 -> minute
- #endif
-
-
- ->/////////////////////////////////////////////////////////////////////////////
- ->///////////////////////////////////////////////////////// DEF ... : ... /////
- ->/////////////////////////////////////////////////////////////////////////////
- DEF timer_mp : PTR TO mp
- DEF timer_req : PTR TO timerequest
-
-
- ->/////////////////////////////////////////////////////////////////////////////
- ->///////////////////////////////////////////////////////////// PROC main /////
- ->/////////////////////////////////////////////////////////////////////////////
- PROC main() HANDLE
-
- DEF rdargs = NIL , args : PTR TO LONG
- DEF tr : PTR TO trace
- DEF first = TRUE , delay
-
- PrintF( ' \c1;33;40\cMSFU\c0;31;40\c v1.1\n' , $9B , $6D , $9B , $6D )
- PutStr( 'Copyright © 1995, Lionel Vintenat\n' )
- PrintF( '\c1;32;40\c---------------------------------\c0;31;40\c\n' , $9B , $6D , $9B , $6D )
-
- rdargs := ReadArgs( 'TF=TRACEFILE,LIBS/S,DEVS/S,ALL/S,FD=FIRSTDELAY/N,DELAY/N,BEEP/S,REQUESTER/S' ,
- NEW args[ NUMBER_ARGS ] , NIL )
-
- NEW tr.create( args[ ARG_TRACEFILE ] )
- tr.load()
-
- IF ( args[ ARG_LIBS ] OR args[ ARG_DEVS ] OR args[ ARG_ALL ] )
-
- OpenDevice( TIMERNAME , UNIT_VBLANK ,
- timer_req := CreateIORequest( timer_mp := CreateMsgPort() , SIZEOF timerequest ) , 0 )
-
- delay := TIMEUNIT * ( IF args[ ARG_FIRSTDELAY ] THEN Long( args[ ARG_FIRSTDELAY ] ) ELSE 10 )
- LOOP
- timer_delay( delay )
- IF args[ ARG_BEEP ]
- DisplayBeep( NIL )
- Delay( 50 )
- ENDIF
- SELECT MAX_ANSWER OF ( IF args[ ARG_REQUESTER ] THEN request() ELSE YES )
- CASE YES
- tr.update( args[ ARG_LIBS ] OR args[ ARG_ALL ] , args[ ARG_DEVS ] OR args[ ARG_ALL ] )
- tr.save()
- CASE QUIT
- Raise( "^C" )
- ENDSELECT
- IF first
- delay := IF args[ ARG_DELAY ] THEN Long( args[ ARG_DELAY ] ) ELSE 10
- first:= FALSE
- ENDIF
- ENDLOOP
-
- ELSE
- tr.sort()
- tr.print()
- ENDIF
-
- EXCEPT DO
-
- SELECT exception
- CASE "MEM"
- PutStr( 'Out of memory !\n' )
- CASE "ARGS"
- PrintFault( IoErr() , 'Bad arguments ' )
- CASE "PORT"
- PutStr( 'Can''t create message port !\n' )
- CASE "TIME"
- PutStr( 'Can''t create timer request !\n' )
- CASE "DEV"
- PutStr( 'Can''t open timer device !\n' )
- CASE "^C"
- PutStr( '***user break***\n' )
- ENDSELECT
-
- IF timer_mp THEN DeleteMsgPort( timer_mp )
- IF timer_req
- IF timer_req.io.device THEN CloseDevice( timer_req )
- DeleteIORequest( timer_req )
- ENDIF
- IF rdargs THEN FreeArgs( rdargs )
-
- #ifdef DEBUG
- report_exception()
- #endif
-
- ENDPROC
-
-
- ->/////////////////////////////////////////////////////////////////////////////
- ->//////////////////////////////////////////////////////// Version string /////
- ->/////////////////////////////////////////////////////////////////////////////
- CHAR '$VER: MSFU 1.1 (9.9.95)'
-
-
- ->/////////////////////////////////////////////////////////////////////////////
- ->////////////////////////////////////////////////////////// PROC request /////
- ->/////////////////////////////////////////////////////////////////////////////
- PROC request() IS EasyRequestArgs( NIL ,
- [ 20 , 0 , 'MSFU is talking to you...' , 'Ready to save current state ?' , 'Yes|No|Quit' ] ,
- 0 , NIL )
-
-
- ->/////////////////////////////////////////////////////////////////////////////
- ->////////////////////////////////////////////////////// PROC timer_delay /////
- ->/////////////////////////////////////////////////////////////////////////////
- PROC timer_delay( secs )
-
- DEF sig
-
- timer_req.time.secs := secs
- timer_req.time.micro := 0
- timer_req.io.command := TR_ADDREQUEST
- SendIO( timer_req )
- sig := Wait( Shl( 1 , timer_mp.sigbit ) OR SIGBREAKF_CTRL_C )
- IF ( sig AND SIGBREAKF_CTRL_C )
- AbortIO( timer_req )
- WaitIO( timer_req )
- Raise( "^C" )
- ELSE
- WaitIO( timer_req )
- ENDIF
-
- ENDPROC
-